/*
 * Copyright 2000-2020 ALPHA LAB.Inc All Rights Reserved.
 */
package com.alphalab.framework.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; 

/**
 * Map转换工具类.
 * @author allen 
 * @version 1.0.0 2018年3月5日
 */
public final class MapTransferUtil {
	
	/**
	 * 私有构造函数.
	 */
	private MapTransferUtil() { 
	}
	 
	/**
	 * 将list转换成map，一个keyid对应一个VO对象.
	 * @param <T>  .
	 * @param list 要进行转换的数组
	 * @param keyId 主键id
	 * @return map对象
	 */
	public static <T> Map<String, T> list2MapVO(final List<T> list, final String keyId) {
		final Map<String, T> map = new HashMap<String, T>(16);
		if (list == null || list.size() == 0) {
			return map;
		}
		for (T t : list) {
			final String propertyValue = ReflectionUtil.getPropertyValue(t, keyId).toString();
			if (StringUtil.isEmptyString(propertyValue)) {
				continue;
			}
			if (!map.containsKey(propertyValue)) {
				map.put(propertyValue, t);
			}
			
		} 		
		return map;
	}
	
	/**
	 * 将List转换成Map对象，其中value为List对象数组.
	 * @param <T> <T>
	 * @param list 要进行转换的数组
	 * @param property map中指定的属性
	 * @return map对象
	 */ 
	public static <T> Map<String, List<T>> list2MapList(final List<T> list, final String property) {
		final Map<String, List<T>> map = new HashMap<String, List<T>>(16);
		List<T> dataList = null;
		for (T t : list) {
			final String propertyValue = ReflectionUtil.getPropertyValue(t, property).toString();
			if (map.containsKey(propertyValue)) {
				dataList = map.get(propertyValue);
				if (dataList == null) {
					dataList = new ArrayList<T>();
				}
				dataList.add(t);
			} else {
				dataList = new ArrayList<T>();
				dataList.add(t);
				map.put(propertyValue, dataList);
			}
		}
		return map;
	}
	
}
